package com.example.controleautomovel.adapter;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import com.example.controleautomovel.pojo.Combustivel;

public class CombustivelDBAdapter {

	private final Context ctx;
	private combustivelDBHelper dbHelper;
	private SQLiteDatabase db;
	
	private static final String NOME_BANCO = "combustivel.db";
	private static final String NOME_TABELA = "COMBUSTIVEL";
	private static final int VERSAO_BANCO = 20;
	
	private static final String TYPE_LONG = "LONG";
	private static final String TYPE_TEXT = "TEXT";
	private static final String TYPE_INT = "INTEGER";
	private static final String TYPE_REAL = "REAL";
	private static final String TYPE_NUMERIC = "NUMERIC";
	
	private static final String COL_ID = "ID";
	private static final String COL_DATA = "DATA";
	private static final String COL_CUSTO_TOTAL = "CUSTO_TOTAL";
	private static final String COL_ODOMETRO = "ODOMETRO";
	private static final String COL_QTD_LITROS = "QTD_LITROS";
	private static final String COL_VALOR_LITRO = "VALOR_LITRO";
	private static final String COL_ABASTECIMENTO = "ABASTECIMENTO";
	
	private static final String SQL_TABELA_COMBUSTIVEL = "create table " + NOME_TABELA + "(" +
														COL_ID + TYPE_INT + " primary key autoincrement," +
														COL_DATA + TYPE_NUMERIC + " not null," +
														COL_CUSTO_TOTAL + TYPE_REAL + " not null," +
														COL_ODOMETRO + TYPE_LONG + " not null," +
														COL_QTD_LITROS + TYPE_LONG + " not null," +
														COL_ABASTECIMENTO + TYPE_INT + " not null," +
														COL_VALOR_LITRO + TYPE_REAL + " not null)";
	
	public CombustivelDBAdapter(Context ctx) {
		this.ctx = ctx;
		dbHelper = new combustivelDBHelper(ctx, NOME_BANCO, null, VERSAO_BANCO);
	}
	
	public CombustivelDBAdapter open(){
		db = dbHelper.getWritableDatabase();
		return this;
	}
	
	public void close(){
		db.close();
	}
	
	public int inserirCombustivel(Combustivel c){
		ContentValues valores = new ContentValues();
		valores.put(COL_DATA, c.getData());
		valores.put(COL_CUSTO_TOTAL, c.getCustoTotal());
		valores.put(COL_ODOMETRO, c.getOdometro());
		valores.put(COL_QTD_LITROS, c.getLitros());
		valores.put(COL_ABASTECIMENTO, c.getAbastecimento());
		valores.put(COL_VALOR_LITRO, c.getValorPorLitro());
//		valores.put(COL_LOCALIZACAO, null);
		return (int) db.insert(NOME_TABELA, null, valores);
	}
	
	public Combustivel recuperarAutomovel(int id){
		Combustivel c = new Combustivel();
		
		String[] colunas = {COL_ID, COL_DATA, COL_CUSTO_TOTAL, COL_ODOMETRO, COL_QTD_LITROS, COL_ABASTECIMENTO ,COL_VALOR_LITRO};
		Cursor resultados = db.query(NOME_TABELA, colunas, 
				COL_ID + " = " + id, null, null, null, COL_ID);
		
		resultados.moveToFirst();
		c.setId(resultados.getInt(resultados.getColumnIndex(COL_ID)));
		c.setData(resultados.getString(resultados.getColumnIndex(COL_DATA)));
		c.setCustoTotal(resultados.getDouble(resultados.getColumnIndex(COL_CUSTO_TOTAL)));
		c.setOdometro(resultados.getDouble(resultados.getColumnIndex(COL_ODOMETRO)));
		c.setLitros(resultados.getLong(resultados.getColumnIndex(COL_QTD_LITROS)));
		c.setAbastecimento(resultados.getInt(resultados.getColumnIndex(COL_ABASTECIMENTO)));
		c.setValorPorLitro(resultados.getDouble(resultados.getColumnIndex(COL_VALOR_LITRO)));
		
		return c;
	}
	
	public int editarContato(int id, Combustivel c){
		ContentValues valores = new ContentValues();
		valores.put(COL_DATA, c.getData());
		valores.put(COL_CUSTO_TOTAL, c.getCustoTotal());
		valores.put(COL_ODOMETRO, c.getOdometro());
		valores.put(COL_QTD_LITROS, c.getLitros());
		valores.put(COL_VALOR_LITRO, c.getValorPorLitro());
		
		return db.update(NOME_TABELA, valores, COL_ID + " = " + id, null);
	}
	
	public int deletarTodos(){
		return db.delete(NOME_TABELA, null, null);
	}
	
	public int deletarContato(int id){
		return db.delete(NOME_TABELA, COL_ID + " = " + id, null);
	}
	
	public ArrayList<Combustivel> listaAbastecimento(){
		ArrayList<Combustivel> lista = new ArrayList<Combustivel>();
		String[] colunas = {COL_ID, COL_DATA, COL_CUSTO_TOTAL, COL_ODOMETRO, COL_QTD_LITROS, COL_VALOR_LITRO};
		Cursor resultados = db.query(NOME_TABELA, colunas, null, null, null, null, COL_DATA);

		Combustivel c;
		if(resultados.getCount() > 0){
			resultados.moveToFirst();
			do{
				c = new Combustivel();
				c.setId(resultados.getInt(resultados.getColumnIndex(COL_ID)));
				c.setData(resultados.getString(resultados.getColumnIndex(COL_DATA)));
				c.setCustoTotal(resultados.getDouble(resultados.getColumnIndex(COL_CUSTO_TOTAL)));
				c.setOdometro(resultados.getDouble(resultados.getColumnIndex(COL_ODOMETRO)));
				c.setLitros(resultados.getLong(resultados.getColumnIndex(COL_QTD_LITROS)));
				c.setValorPorLitro(resultados.getDouble(resultados.getColumnIndex(COL_VALOR_LITRO)));
				
				lista.add(c);
			}while(resultados.moveToNext());
		}
		
		return lista;
	}
	
	private static class combustivelDBHelper extends SQLiteOpenHelper{
		
		public combustivelDBHelper(Context context, String name,
				CursorFactory factory, int version) {
			super(context, name, factory, version);
			// TODO Auto-generated constructor stub
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			Log.d("DATABASE","onCreate!");
			db.execSQL(SQL_TABELA_COMBUSTIVEL);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			// TODO Auto-generated method stub
			Log.d("DATABASE","onUpgrade!");
			db.execSQL("DROP TABLE IF EXISTS " + NOME_TABELA);
			onCreate(db);
		}
		
	}
	
}
